package Chapter8_polymorphism;

/**
 * Date: 2019/2/19
 * Time: 22:14
 * User: Driss.
 */
class Characteristic{
    private String s;
    Characteristic(String s){
        this.s = s;
        System.out.println("Creating Characteristic " + s);
    }
    protected void dipose(){
        System.out.println("disposing Characteristic " + s);
    }
}

class Description{
    private String s;
    Description(String s){
        this.s = s;
        System.out.println("Creating Description " + s);
    }
    protected void dispose(){
        System.out.println("disposing Description " + s);
    }
}

class LivingCrature{
    private Characteristic p = new Characteristic("is alive");
    private Description t = new Description("basic living Creature");
    LivingCrature(){
        System.out.println("LivingCreature()");
    }

    protected void dispose(){
        System.out.println("livingCreature dispose");
        t.dispose();
        p.dipose();
    }
}


class Animal extends LivingCrature{
    private Characteristic p = new Characteristic("has heart");
    private Description t = new Description("Animal not Vegetable");
    Animal(){
        System.out.println("Animal()");
    }
    protected void dispose(){
        System.out.println("Animal dispose");
        t.dispose();
        p.dipose();
        super.dispose();
    }
}

class Amphibian extends Animal{
    private Characteristic p = new Characteristic("can live in water");
    private Description t = new Description("Both water and land");
    Amphibian(){
        System.out.println("Amphibian");
    }

    protected void dispose(){
        System.out.println("Amphibian dispose");
        t.dispose();
        p.dipose();
        super.dispose();
    }
}

public class Frog extends Amphibian{
    private Characteristic p = new Characteristic("Croaks");
    private Description t = new Description("Eats Bugs");
    public Frog(){
        System.out.println("Frog()");
    }
    protected void dispose(){
        System.out.println("Frog dipose");
        t.dispose();
        p.dipose();
        super.dispose();
    }

    public static void main(String[] args) {
        Frog frog = new Frog();
        System.out.println("bye!");
        frog.dispose();
    }
}
